package cn.iocoder.yudao.module.eval.dal.mysql.template;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.module.eval.controller.admin.template.vo.EvalMethodTypePageReqVO;
import cn.iocoder.yudao.module.eval.dal.dataobject.template.EvalMethodTypeDO;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;

/**
 * 评价方式类型 Mapper
 *
 * @author 芋道源码
 */
@Mapper
public interface EvalMethodTypeMapper extends BaseMapperX<EvalMethodTypeDO> {

    default PageResult<EvalMethodTypeDO> selectPage(EvalMethodTypePageReqVO reqVO) {
        return selectPage(reqVO, new LambdaQueryWrapperX<EvalMethodTypeDO>()
                .likeIfPresent(EvalMethodTypeDO::getTypeCode, reqVO.getTypeCode())
                .likeIfPresent(EvalMethodTypeDO::getTypeName, reqVO.getTypeName())
                .eqIfPresent(EvalMethodTypeDO::getParentId, reqVO.getParentId())
                .eqIfPresent(EvalMethodTypeDO::getTypeLevel, reqVO.getTypeLevel())
                .eqIfPresent(EvalMethodTypeDO::getIsActive, reqVO.getIsActive())
                .betweenIfPresent(EvalMethodTypeDO::getCreateTime, reqVO.getCreateTime())
                .orderByAsc(EvalMethodTypeDO::getSortOrder)
                .orderByDesc(EvalMethodTypeDO::getId));
    }

    default EvalMethodTypeDO selectByTypeCode(String typeCode) {
        return selectOne(EvalMethodTypeDO::getTypeCode, typeCode);
    }

    default List<EvalMethodTypeDO> selectListByParentId(Long parentId) {
        return selectList(new LambdaQueryWrapperX<EvalMethodTypeDO>()
                .eq(EvalMethodTypeDO::getParentId, parentId)
                .orderByAsc(EvalMethodTypeDO::getSortOrder));
    }

    default List<EvalMethodTypeDO> selectListByTypeLevel(Integer typeLevel) {
        return selectList(new LambdaQueryWrapperX<EvalMethodTypeDO>()
                .eq(EvalMethodTypeDO::getTypeLevel, typeLevel)
                .orderByAsc(EvalMethodTypeDO::getSortOrder));
    }

    default List<EvalMethodTypeDO> selectListByIsActive(Integer isActive) {
        return selectList(new LambdaQueryWrapperX<EvalMethodTypeDO>()
                .eq(EvalMethodTypeDO::getIsActive, isActive)
                .orderByAsc(EvalMethodTypeDO::getSortOrder));
    }

}
